home *** CD-ROM | disk | FTP | other *** search
/ Turnbull China Bikeride / Turnbull China Bikeride - Disc 2.iso / STUTTGART / LANG / C / GCC / PATCH1 / !gcc / docs / !Intro
Text File  |  1997-04-20  |  27KB  |  697 lines

  1. Introduction to GCC for RISC OS
  2. ===============================
  3.  
  4. This is a short introduction to GCC. Information concerning a specific
  5. compiler can be found elsewhere. The documents supplied with each GCC
  6. compatible compiler do not provide an introduction to programming in that
  7. particular language, for that you will have to get a text book on the language.
  8.  
  9. Please note, if you have received this copy of GCC from a CD, then it is
  10. likely there is a more up-to-date version obtainable from elsewhere.
  11.  
  12.  
  13. GCC is a small program providing a simple and consistent front end to many
  14. compilers. Currently, the compilers supported are GNU C, GNU C++,
  15. GNU Objective-C, GNU Fortran, GNU GNAT Ada and GNU Pascal. As more compilers
  16. are released, GCC will support those too.
  17.  
  18. GCC is covered by the FSF General Public License (see the files docs.COPYING
  19. and docs.COPYINGLIB for details).
  20.  
  21. This port of GCC is © Copyright 1996, 1997 Nick Burrett
  22.  
  23. As with all GNU programs, THERE IS NO WARRANTY OF ANY SORT
  24.  
  25. The GCC distribution is a support archive providing the files common to all
  26. of the above compilers. This includes:
  27.   - an assembler (as)
  28.   - a linker front end (ld)
  29.   - the compiler front end (gcc)
  30.   - a C preprocessor (cpp)
  31.   - a runtime library (gcc.o.libgcc)
  32.   - gcc specific header files (gcc.h)
  33.   - this document and others (gcc.docs)
  34.  
  35. An Acorn Object Format linker is not provided but there exists a Public
  36. Domain linker called Drlink. Details on where to obtain this are detailed
  37. at the end of this document.
  38.  
  39. Thanks go to various people for the help and assistance that they have
  40. given me. Notably:
  41.  
  42. Peter Burwood for bug fixes, enhancements, testing, suggestions and more...
  43. Niklas RÖjemo, for the assembler 'as'
  44. Huw Rogers and Simon Callan, for UnixLib.
  45. Jochen Scharrlach for the RISC OS GCC FAQ.
  46. Cy Brooker for the DDEUtilsCy module.
  47.  
  48.  
  49. Installation
  50. ------------
  51.  
  52. To install the GCC front end, copy the contents of this archive onto your
  53. hard disc. Compilers can be installed by copying the contents of their
  54. archives into the same directory as where you installed the GCC front end.
  55. RISC OS will automatically combine the !gcc directories together.
  56. Running !gcc will setup Run$Path to automatically search for the compiler
  57. tools.
  58.  
  59. As compilers are installed, sub-directories named according to the language
  60. they support will be placed within !gcc.docs. These sub-directories will
  61. contain specific information for the language compiler, including its
  62. usage and environment requirements.
  63.  
  64. You will require a linker and this must be obtained from a separate source,
  65. the location of which is given below. The linker must be installed in a
  66. directory that Run$Path searches, or within the !gcc.bin directory.
  67.  
  68. GCC uses a linker front end, LD. This will search for both drlink and link
  69. on the current Run$Path and in that order.
  70.  
  71. This completes installation, and GCC may be used simply by typing
  72. 'gcc' at the CLI prompt.
  73.  
  74.  
  75. Simple compilations
  76. -------------------
  77.  
  78. This assumes you have actually installed a compiler and are using UnixLib
  79. as the run-time library. Please note that the instructions below are generic
  80. and the ideas presented can be applied to all GNU compilers. The usage of
  81. C source files is merely co-incidental.
  82.  
  83. Source files are stored in the standard ASCII Text format and kept in a
  84. directory that is relevant for the language of your program. For example,
  85. C programs are stored in directory 'c' and C++ programs are stored in 'cc'.
  86.  
  87. For simple use, all that is needed is to set up a command line prompt and
  88. ensure there is enough free memory to run the compiler (details of memory
  89. requirements vary between compilers and can be found in the specific
  90. compiler documentation).
  91.  
  92. To compile a C program just type:
  93.  
  94.    gcc c.hellow
  95.  
  96. This will compile, assemble and link the source 'c.hellow' to produce an
  97. executable called '!RunImage', which can be run immediately.
  98.  
  99. Adding the switch '-o' to the command line, it's possible to specify a
  100. place to store the resultant file:
  101.  
  102.   gcc c.hellow -o hellow
  103.  
  104. This will comple, assemble and link the source 'c.hellow' to produce an
  105. executable called 'hellow', which can be run immediately.
  106.  
  107. It is possible to compile several sources at one go, mixing C sources in
  108. the same program, using a command line of:
  109.  
  110.    gcc c.file1 c.file2 c.file3 c.file4
  111.  
  112. Again, this will compile, assemble and link all the sources to produce the
  113. '!RunImage' executable.
  114.  
  115. To compile to the object form, use the -c switch. i.e.
  116.  
  117.    gcc -c c.file
  118.  
  119. will compile and assemble 'c.file' to 'o.file'.
  120.  
  121. To compile the same files but using the SharedCLibrary as the target
  122. run-time library instead of UnixLib, add the switch '-mstubs' to the
  123. command line. For example:
  124.  
  125.   gcc c.hellow -mstubs
  126.  
  127. will compile and link the c.hellow source file, using header files
  128. from the SharedCLibrary, and linking against the library C:o.stubs.
  129. The output file will still be called '!RunImage' and can be run
  130. in the same way.
  131.  
  132. Support has been provided for both RISC OS and UNIX format filenames. GCC
  133. will translate any UNIX filenames into their RISC OS equivalent. For example:
  134.  
  135.   ../include/stdio.h    is translated to    ^.include.h.stdio
  136.   /work/gcc/hello.c    is translated to    $.work.gcc.c.hello
  137.   stdlib.h        is translated to    h.stdlib
  138.  
  139. but
  140.   tree.def        is translated to    tree.def
  141.  
  142.  
  143. Switches
  144. --------
  145.  
  146. This is a list of the simpler, standard switches for GCC. Full details can
  147. be obtained from the !gcc.docs.gccuser manual. Please see below for the ARM
  148. specific switches since these have altered from the original gcc version.
  149.  
  150. The switches described below are useable with any GNU compiler.
  151.  
  152. -c              compile and assemble the source to the object file
  153. -S              compile the source to assembler code
  154. -E              preprocess the source file
  155. -o <file>       put the resulting output into <file>
  156. -O              apply some optimisations to the output
  157. -O2             apply full optimisation.
  158. -O3        full optimisation and inline small functions as well.
  159.  
  160. There are some additional ARM specific switches.
  161.  
  162.  -mapcs, -mapcs-frame
  163.    target for ARM Procedure Call Standard stack frames.
  164.  
  165.  -mpoke-function-name
  166.    place the name of the current function before the start of the function
  167.    to allow the post mortem debugger to print a readable backtrace.
  168.    Using it's opposite will reduce code size by about 3.5%.
  169.  
  170.  -mfpe
  171.    prevents instruction scheduling of floating point instructions since it
  172.    increases compile time and the benefits acheived make no difference through
  173.    the FPE.
  174.  
  175.  -mapcs-32
  176.    target the APCS-32 bit standard. Condition flags are assumed to be corrupted
  177.    by function calls in this mode.
  178.  
  179.  -mapcs-stack-check
  180.    provide explicit stack checking on entry to each function which allocates
  181.    temporary variables on the stack.
  182.  
  183.  -mapcs-strict
  184.    make the compiler conform strictly to the APCS even in the cases where
  185.    stack frames do not need to be set up.
  186.  
  187.  -mshort-load-bytes, -mno-short-load-words
  188.    if the MMU traps unaligned word accesses, shorts must be loaded
  189.    byte-at-a-time so this flag should be set.
  190.  
  191. RISC OS specific options
  192.  
  193.  -mthrowback
  194.    send errors to a text editor capable of receiving 'throwbacks'.
  195.    Error throwbacks will only occur when the DDEUtils module has previously
  196.    been loaded.
  197.  
  198.  -msharedclib, -mstubs
  199.    compiles to target SharedCLibrary and tells the linker to link with
  200.    the file C:o.stubs instead of UnixLib.
  201.  
  202.  -munixlib
  203.    tell the linker to target UnixLib instead of the SharedCLibrary. The
  204.    linker will attempt to link with the file Unix:o.unixlib.
  205.  
  206.  -mamu
  207.    Generate the file !Depend which contains a list of all the source
  208.    files that the produced object depends on. This is intended for use
  209.    with Acorn's Make Utility (AMU), which edits the makefile to include
  210.    these after the '# Dynamic Dependencies' line.
  211.  
  212.  
  213. LD
  214. --
  215.  
  216. LD is a front end program that converts the linker command line as generated
  217. by gcc to a format recognised by Drlink and Link. LD also attempts to
  218. convert Unix format names to RISC OS format. The option recognised are:
  219.  
  220.  -L<dir>
  221.    This specifies a directory/path that LD is to use when searching
  222.    for libraries. <dir> must be either a path (i.e gcc:, etc), or it
  223.    must be a valid Unix/RISC OS directory name, ending in either '/'
  224.    or '.'. Directories are searched in the order that they are
  225.    specified.
  226.  
  227.  -l<file>
  228.    This specifies the name of a library file which LD will search the
  229.    library directories for. This may either be a complete filename (i.e
  230.    C:o.stubs) or just the leaf name, in which case, LD will search
  231.    though the specified library directories for the file o.lib<file>
  232.    and o.<file> if the former isn't found.
  233.  
  234.  -o <file>
  235.    This specifies the filename to which the resultant executable will
  236.    be stored.
  237.  
  238.  -via <file>
  239.    <file> contains a list of object files to be included in the link process.
  240.  
  241.  -version
  242.    Print the version number of 'ld'.
  243.  
  244.  -help
  245.    Display a brief summary of LD and its command line arguments.
  246.  
  247.  
  248. The following Drlink linker commands are recognised:
  249.   -acornmap, -area[map] <file>, -aif, -aof, -bin, -case,
  250.   -leave[weak], -map, -no[unused], -output, -res[can],
  251.   -throwback, -via <file>, -verbose
  252.  
  253. The following Acorn Link linker commands are recognised:
  254.   -aif, -aof, -bin, -map, -via <file>, -nounused[areas], -verbose
  255.  
  256. Unrecognised commands are flagged as an error and LD will not perform the
  257. link process. Characters with square brackets are optional.
  258.  
  259. The sequence '-Lgcc: -LC: -lgcc -lstubs' will cause LD to look for the files
  260. gcc:o.libgcc, gcc:o.gcc, c:o.libgcc, c:o.gcc, gcc:o.libstubs, gcc:o.stubs,
  261. c:o.libstubs and c:o.stubs, taking the first gcc and stubs files that it finds.
  262.  
  263. Linker options can be passed from GCC to link using -Wl and -XLinker options.
  264.  
  265. The linker must be in the default Run$Path, as LD does not handle the -B
  266. command. Please note that it is best to define GCC$Linker in the !gcc.!run
  267. file to point to the linker you want to use. e.g.
  268.   Set GCC$Linker "link"
  269. will make LD use the program 'link' for linking.
  270.  
  271.  
  272. Predefines
  273. ----------
  274.  
  275. The following preprocessor constants are defined by GCC:
  276.    'arm', '__arm__', 'riscos', '__riscos__',
  277.    '__GNUC_MINOR__', '__GNUC_MAJOR__', '__JMP_BUF_SIZE'
  278.  
  279. To implement dynamic allocations within a function, it is necessary to add
  280. an extra field to jmpbuf. Fortunately the setjmp.h header files recognise
  281. __JMP_BUF_SIZE and can alter their jmpbuf array appropriately.
  282.  
  283.  
  284. Search paths
  285. ------------
  286.  
  287. The default search paths for GCC are as follows and searched in the
  288. specified order.
  289.    GCC$Path        GCC specific include files.
  290.    Unix$Path       Unixlib header files.
  291.  
  292.  
  293. <varargs.h>, <assert.h>, <stdarg.h>
  294. -----------------------------------
  295.  
  296. GCC supplies it's own versions of these header files since they are not
  297. compatible with the headers supplied with Acorn C and UnixLib.  However,
  298. this feature is invisible to the user.
  299.  
  300.  
  301. Compatibility between GCC, StrongARM and RISC OS 2
  302. --------------------------------------------------
  303.  
  304. As of release 1.0.7 and later, GCC is now compatible with StrongARM
  305. processors. Code produced by GCC will also be usable with StrongARM
  306. provided a version of UnixLib 3.7b or later is used.  Linking against
  307. previous versions of UnixLib will undoubtably fail with some very
  308. unusual results.
  309.  
  310. Unfortunately, GCC has become unusable on any release of RISC OS prior to
  311. release 3.10 because the module CallASWI is now used.
  312.  
  313.  
  314. GCC and Virtual Memory
  315. ----------------------
  316.  
  317. GNU compilers use a lot of memory and nothing can be done about that. For
  318. the Risc PC, UnixLib has been modified to make use of dynamic areas. So
  319. users with small memory machines can use Clares' Virtualise to provide a
  320. working virtual memory envionment for them. See the section *Dynamic Areas*
  321. below.
  322.  
  323. Users of older machines, the Archimedes and A5000, can use the program
  324. !Virtual. Currently the version is 0.37 and there exists a few small problems
  325. with running gcc 2.7.2 compilers (or any UnixLib 3.7a and later programs)
  326. under this environment.
  327.  
  328. UnixLib 3.7a has been heavily modified and uses some unsupported SWI calls
  329. notably, XOS_RemoveTickerEvent, an XOS_Byte call and OS_PlatformFeatures.
  330. Until a later version of !Virtual is released, it is safe to answer 'Y' to
  331. all the questions related to Unknown SWIs.
  332.  
  333. Users of !Virtual can disregard the information contained within the
  334. specific compiler documentation concerning wimp slot size. Under the
  335. virtual memory environment, the wimp slot will need to be set to a size
  336. approximately 32K greater than the largest binary likely to be executed, the
  337. compiler. For example, if the size of cc1 is 700K, then setting the wimp slot
  338. to 732K should ensure that a successful compilation can be made
  339.  
  340. It should be noted that the greater amount of wimp slot that can be given
  341. to a virtual memory task, a smaller number of page swaps will be needed and
  342. a significant improvement in compile times should result.
  343.  
  344.  
  345. Dynamic areas
  346. -------------
  347.  
  348. Peter Burwood has modified UnixLib to use dynamic areas on the Risc PC and
  349. these modifications have been included in UnixLib 3.7a. This section applies
  350. to all GNU compilers supplied by either Nick Burrett, Peter Burwood or
  351. (hopefully) anyone else providing they have used UnixLib 3.7a or later. A
  352. description of using dynamic areas is included with UnixLib 3.7a and some
  353. of it is duplicated here:
  354.  
  355. UnixLib 3.7a has a facility to use Dynamic Areas, found in RISC OS 3.5
  356. and above, for the program's heap. The heap is another name for the
  357. malloc area. The advantages of using a dynamic area for the program's
  358. heap include :-
  359.  
  360.    * the WimpSlot of the program can be limited to the code and stack
  361.      requirements of the program. This helps alleviate the cost of RISC
  362.      OS task switching which slows down dramatically as the WimpSlot
  363.      grows in size.
  364.  
  365.    * Dynamic Areas provide a means of Virtual Memory when used with a
  366.      product such as Virtualise[1]. Virtual Memory allows programs to
  367.      use more data space than is available with just physical memory.
  368.  
  369. If any problems are encountered with the implementation or use of the
  370. dynamic area UnixLib heap then please contact Peter Burwood via e-mail at
  371. daheap@arcangel.dircon.co.uk. Please do not contact Peter with general
  372. UnixLib problems, but see the UnixLib ReadMe file for a contact address.
  373.  
  374. Basically, use
  375.  
  376.   *Set GCC_Heap ""
  377.  
  378. to enable dynamic areas for the compiler and
  379.  
  380.   *UnSet GCC_Heap
  381.  
  382. to disable dynamic areas for the compiler.
  383.  
  384. Before running a program set the wimpslot in the normal way, but it only
  385. needs to be large enough to hold the sum of the largest executables that
  386. can be run concurrently. e.g., with gcc, use the unsqueezed size of gcc
  387. plus cc1. When running from a command line amu remember to allow
  388. additional space for the amu executable and amu's workspace (though this
  389. is tricky to estimate!).
  390.  
  391. If other programs that form part of a compiler are run directly from the
  392. command line, e.g., gnatmake, then separate environment variables must
  393. be set to allow these programs to use dynamic areas for the program's
  394. heap. So, with gnatmake,
  395.  
  396.    *Set gnatmake_heap ""
  397.  
  398. As a user, you should not really need to worry about these details as the
  399. !gcc.!run file already contains the relevant lines. Please read the !run
  400. file if you are a Risc PC user, since some lines will need to be uncommented.
  401.  
  402. [1] Virtualise is a commercial product available from Clares. Peter Burwood
  403. has no connection with Clares or the Virtualise product other than being a
  404. user of Virtualise. If other similar products become available then UnixLib
  405. should work transparently since the UnixLib startup code does not use
  406. any Virtualise features.
  407.  
  408.  
  409. Troubleshooting
  410. ---------------
  411.  
  412. Here are describled some common problems users have with gcc and the GNU
  413. compilers. Possible solutions are provided for the known problems.
  414.  
  415. 1. The compiler fails to compile anything but no error message is reported.
  416.  
  417.   This is usually caused by a lack of memory. To see how far through
  418.   compilation a file has gone, try compiling with the '-v' flag. '-v' gives
  419.   verbose output and will show the programs gcc is executing.
  420.   
  421.   A lack of memory will be shown up by an almost instantaneous return from
  422.   any program executed. If this happens, try increasing the wimpslot,
  423.   using *wimpslot -min nnnK, where nnn is as follows:
  424.   
  425.   a) When not using dynamic areas i.e. when gcc_heap isn't set or you
  426.      don't have a RiscPC
  427.       2500 or more for GNU C
  428.       2600 or more for GNU Objective-C
  429.       3000 or more for GNU C++
  430.       6000 or more for GNAT Ada
  431.  
  432.   b) When using dynamic areas (RiscPC's only) and *set gcc_heap "" has been
  433.      performed.
  434.       1500 or more for GNU C
  435.       1500 or more for GNU Objective-C
  436.       1900 or more for GNU C++
  437.       3200 or more for GNAT Ada
  438.  
  439.   When the compiler runs out of memory during compilation, an error
  440.   'virtual memory exhausted' is usually reported.
  441.  
  442. 2. Abort on data transfer errors are displayed during compilation
  443.  
  444.   This is due to a lack of memory and will be rectified by increasing the
  445.   wimpslot to similar values as above.
  446.  
  447. 3. The error 'No writable memory at this address' is returned.
  448.  
  449.   This is due to a lack of memory and will be rectified by increasing the
  450.   wimpslot to similar values as above.
  451.  
  452. 4. ld fatal error: drlink returned exit status 12
  453.  
  454.   This is due to a lack of memory during the linking stage. Increase the
  455.   wimpslot to rectify this.
  456.  
  457. 5. The error 'virtual memory exhausted' is returned.
  458.  
  459.   This is due to a lack of memory and usually occurs during the compilation
  460.   process.
  461.   
  462.   a) If you are running on a RiscPC, make sure that !gcc.!run has been
  463.      altered for using dynamic areas.
  464.      
  465.      If the is already altered, then you might have to reduce the number of
  466.      applications that are running before using gcc.
  467.  
  468.   b) If you are not running on a RiscPC then increase WimpSlot to a much
  469.      larger value.
  470.      
  471.      You can try using !Virtual.
  472.  
  473. 6. A source file is correctly compiled and linked. The resultant executable
  474.    'hellow' is placed in the current directory. However, when I try and
  475.    run the file I get the error 'No such file or directory'.
  476.    
  477.    This and many other obsure errors are caused by linking source files
  478.    against run-time libraries that are incompatible with the StrongARM
  479.    processor. An example would be UnixLib 3.7a.
  480.    
  481.    StrongARM compatibility wasn't introduced to UnixLib until version 3.7b.
  482.  
  483.  
  484. AOF files, Libraries, Linkers etc.
  485. ----------------------------------
  486.  
  487. If you are confused about the above terms, then you might want to read this:
  488.  
  489. Taking the C compiler as an example. Language C source files are stored within
  490. a directory called 'c'.
  491.  
  492. Typing
  493.   *gcc -c c.hello -o o.hello
  494.  
  495. will tell gcc to run the C compiler on the source file c.hello. The resultant
  496. output will be stored in the directory 'o' as hello. Files in 'o' are called
  497. Acorn Object Format (AOF) files.
  498.  
  499. During multistage compilation (i.e. where a program is made up from several
  500. source files), the compiler will compile one file at a time and this will
  501. produce several AOF files.
  502.  
  503. Each source file might contain references to variables and functions that are
  504. not defined within its own scope. For an executable to be created, these
  505. references must be resolved and that is the purpose of the Linker.
  506.  
  507. The Linker takes AOF files and attempts to resolve references between them.
  508. Not all references are defined within AOF files, some (like printf) are
  509. defined within libraries - called Acorn Library Format (ALF) files. So the
  510. Linker will also look at ALF files to match unresolved symbols.
  511.  
  512. For example, below is a list of C source files that will be compiled to make
  513. the program called Harry. Along with each source file is a list of the
  514. symbols that are defined within that source, and a list of symbols that
  515. are not defined (i.e. referenced) by that source.
  516.  
  517.     C source: c.fred
  518.       Symbols defined: foo, bar, pint
  519.       Symbols referenced: printf, puts, food
  520.     
  521.     C source: c.bob
  522.       Symbols defined: fags, beer, food
  523.       Symbols referenced: bar, pint
  524.     
  525.     C source: c.harry
  526.       Symbols defined: main
  527.       Symbols referenced: foo
  528.  
  529. Using gcc to compile c.fred, c.bob, c.harry will produce three AOF files,
  530. o.fred, o.bob and o.harry.
  531.  
  532. c.harry contains a reference to 'foo' which is defined within c.fred. So
  533. the Linker must combine o.harry and o.fred to resolve a reference.
  534.  
  535. c.fred contains a reference to 'printf', 'puts' and 'food'. 'food' is
  536. defined by c.bob so o.bob will also be combined with o.harry and o.fred
  537. to resolve further references.
  538.  
  539. 'printf' and 'puts' are defined by the C library, therefore the linker will
  540. need to combine the ALF file with o.harry, o.fred and o.bob to finally
  541. generate an executable.
  542.  
  543.  
  544. Obtaining compilers
  545. -------------------
  546.  
  547. As said earlier, GCC is a compiler front end. Proper compilers can be
  548. obtained from the following places:
  549.  
  550. GNU C, Objective-C and C++:
  551.   ftp://micros.hensa.ac.uk/micros/arch/riscos/b/b013
  552.  
  553. GNU GNAT Ada:
  554.   ftp://micros.hensa.ac.uk/micros/arch/riscos/e/e095
  555.  
  556. GNU Fortran (G77):
  557.   ftp://micros.hensa.ac.uk/micros/arch/riscos/e/e167
  558.  
  559. GNU Pascal (GPC):
  560.   ftp://micros.hensa.ac.uk/micros/arch/riscos/e/e168
  561.  
  562.  
  563. Other compiler related utilities
  564. --------------------------------
  565.  
  566. Listed below is a small set of utilities you might find a useful
  567. complement to the GNU compilers.
  568.  
  569. Drlink (an AOF linker):
  570.   ftp://micros.hensa.ac.uk/micros/arch/riscos/b/b071/drlink.arc
  571.  
  572. UnixLib (a C library emulating BSD, System V and POSIX functions):
  573.   ftp://micros.hensa.ac.uk/micros/arch/riscos/a/a042/unixlib.arc
  574.  
  575.  The latest snapshot of UnixLib may be obtained from:
  576.   http://www.callan.demon.co.uk/unixlib
  577.  
  578. Bison (a yacc parser):
  579.   ftp://ftp.demon.co.uk/pub/archimedes/gnu/bison124.spk
  580.  
  581. Diffutils (file difference and patch programs):
  582.   ftp://ftp.demon.co.uk/pub/archimedes/gnu/diffdist.spk
  583.  
  584. Flex (a lexical analyser: Unix Lex equivalent):
  585.   ftp://ftp.demon.co.uk/pub/archimedes/gnu/flex252.spk
  586.  
  587. Indent (C source code formatter):
  588.   ftp://ftp.demon.co.uk/pub/archimedes/gnu/indent.spk
  589.  
  590. Sed (batch stream editor):
  591.   ftp://ftp.demon.co.uk/pub/archimedes/gnu/sed.spk
  592.  
  593. !Virtual (virtual memory for early Archimedes, A5000 and before):
  594.   ftp://micros.hensa.ac.uk/micros/arch/riscos/a/a277/a277.arc
  595.  
  596.  
  597. Mirrors of hensa/micros
  598. -----------------------
  599.  
  600. Imperial College:
  601.  ftp://src.doc.ic.ac.uk/computing/systems/archimedes/collections/hensa/riscos/
  602.  
  603. Demon Internet Services
  604.  ftp://ftp.demon.co.uk/pub/mirrors/hensa/micros/arch/riscos/
  605.  
  606.  
  607. Distribution patches
  608. --------------------
  609.  
  610. From time to time bugs might be fixed in the GCC distribution. To save
  611. download time involved in uploading/fetching new binaries, patch archives
  612. will become available from the address:
  613.  
  614.   http://www.btinternet.com/~nick.burrett
  615.  
  616. Announcements will be posted to comp.sys.acorn.announce whenever new
  617. patch archives are uploaded.
  618.  
  619.  
  620. Porting compilers
  621. -----------------
  622.  
  623. The above compilers are all called front ends. They provide a mechanism
  624. for translating the relevant source code format (C, C++, Fortran etc.) into
  625. relevant information for the back-end. The back-end converts this information
  626. into a register transfer language and performs most of the optimisation
  627. techniques. This register transfer language is then applied to a processor
  628. back-end which will apply further optimisation (processor specific) and then
  629. output assembler instructions.  The compiler backend can support many
  630. different processors and operating systems, ARM and RISC OS are just two of
  631. them.
  632.  
  633. The job of actually porting new compilers has been made very easy due to the
  634. hard work of the compiler development teams. Nick Burrett wrote the RISC OS
  635. port of the ARM processor backend with a little help from Peter Burwood.
  636. Simon Callan and Huw Rodgers wrote UnixLib without which the job of porting
  637. the compiler would probably never have surfaced.
  638.  
  639. The actual ARM backend used to create the RISC OS port is, for the moment,
  640. unavailable on mainstream release in the GCC distribution. The alterations
  641. made to make the compilers work under RISC OS are very involved, but
  642. procedures are slowly underway to merge changes. Fortunately, the ARM
  643. backend for RISC OS is only going to be of interest to any future language
  644. compiler porters. If anybody wishes to port a new compiler then they should
  645. talk to Nick Burrett who will then send the changes through on request.
  646.  
  647. The main GCC compiler sources can be obtained from the sites listed described
  648. below. Sources are approximately 7.5Mb compressed, 27Mb uncompressed.
  649.  
  650.  
  651. Contacting Nick Burrett
  652. -----------------------
  653.  
  654. I can only be contacted by e-mail at nick.burrett@btinternet.com
  655.  
  656.  
  657. Location of the main GCC sources
  658. --------------------------------
  659.  
  660.   Most GNU software is packed using the GNU `gzip' compression program.
  661.   Source code is available on most sites distributing GNU software.
  662.  
  663.   For information on how to order GNU software on tape, floppy or cd-rom, or
  664.   printed GNU manuals, check the file etc/ORDERS in the GNU Emacs
  665.   distribution, ftp the file /pub/gnu/GNUinfo/ORDERS on prep, or
  666.   e-mail a request to: gnu@prep.ai.mit.edu 
  667.  
  668.   By ordering your GNU software from the FSF, you help us continue to
  669.   develop more free software.  Media revenues are our primary source of
  670.   support.  Donations to FSF are deductible on US tax returns.
  671.  
  672.   thanx -gnu@prep.ai.mit.edu
  673.  
  674.         ASIA: ftp.cs.titech.ac.jp, utsun.s.u-tokyo.ac.jp:/ftpsync/prep,
  675.   cair-archive.kaist.ac.kr:/pub/gnu, ftp.nectec.or.th:/pub/mirrors/gnu
  676.         AUSTRALIA: archie.au:/gnu (archie.oz or archie.oz.au for ACSnet)
  677.         AFRICA: ftp.sun.ac.za:/pub/gnu
  678.         MIDDLE-EAST: ftp.technion.ac.il:/pub/unsupported/gnu
  679.         EUROPE: irisa.irisa.fr:/pub/gnu, ftp.univ-lyon1.fr:pub/gnu,
  680.   ftp.mcc.ac.uk, unix.hensa.ac.uk:/mirrors/uunet/systems/gnu,
  681.   src.doc.ic.ac.uk:/gnu, ftp.ieunet.ie:pub/gnu, ftp.eunet.ch,
  682.   nic.switch.ch:/mirror/gnu, ftp.informatik.rwth-aachen.de:/pub/gnu,
  683.   ftp.informatik.tu-muenchen.de, ftp.win.tue.nl:/pub/gnu, ftp.nl.net,
  684.   ftp.etsimo.uniovi.es:/pub/gnu ftp.funet.fi:/pub/gnu, ftp.denet.dk,
  685.   ftp.stacken.kth.se, isy.liu.se, ftp.luth.se:/pub/unix/gnu,
  686.   ftp.sunet.se:/pub/gnu, archive.eu.net
  687.         SOUTH AMERICA: ftp.inf.utfsm.cl:/pub/gnu, ftp.unicamp.br:/pub/gnu
  688.         WESTERN CANADA: ftp.cs.ubc.ca:/mirror2/gnu
  689.         USA: wuarchive.wustl.edu:/systems/gnu, labrea.stanford.edu,
  690.   ftp.digex.net:/pub/gnu, ftp.kpc.com:/pub/mirror/gnu,
  691.   f.ms.uky.edu:/pub3/gnu,
  692.   jaguar.utah.edu:/gnustuff, ftp.hawaii.edu:/mirrors/gnu,
  693.   uiarchive.cso.uiuc.edu:/pub/gnu, ftp.cs.columbia.edu:/archives/gnu/prep,
  694.   col.hp.com:/mirrors/gnu, gatekeeper.dec.com:/pub/GNU,
  695.   ftp.uu.net:/systems/gnu
  696.  
  697.